import static org.junit.Assert.*;

import java.sql.Connection;
import java.util.ArrayList;

import miniBanco.Core.Cliente;
import miniBanco.Core.Cuenta;
import miniBanco.Core.Moneda;
import miniBanco.Core.TipoConcepto;
import miniBanco.Core.TipoCuenta;
import miniBanco.Mapper.ClienteMapper;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import basics.DBManager;
import basics.TableManager;


public class ClienteMapperTestCase {

	Cliente c;
	TableManager tb;
	ClienteMapper cm;
	@Before
	public void setUp() throws Exception {
    	tb = TableManager.getInstance();
    	tb.DropTablasSistema();
    	tb.CrearTablasSistema();
    	
    	
		cm = new ClienteMapper();
		c = new Cliente(1);
		c.setNombre("Martin");
		c.setCuit(123);
		c.setDni(33795188);
		//grabo el cliente
		cm.doSave(c);
		//
		Cuenta cuenta = new Cuenta(Moneda.Pesos,1,TipoCuenta.CtaCorriente);
		cuenta.setSaldo(1000);
		c.AgregarCuenta(cuenta);
		//grabo las cuentas
		cm.doSave(c);
		//borro el loadedMap para q lo vaya a buscar a la BD 
		cm.borrarLoadedMap();	
	}

	@After
	public void tearDown() throws Exception {
    	tb.dropClienteTable();
	}
	
	@Test
	public void AgregoClienteTest() {
		Cliente c1 = cm.find(1);
		long cantidad = cm.Count();
		assertEquals(1, cantidad);
		assertEquals(c.getNombre(), c1.getNombre());
		assertNotNull(c);
	}
	@Test
	public void FindClienteTest() {
		
		ClienteMapper cm = new ClienteMapper();
		long cantidad = cm.Count();
		assertEquals(1, cantidad);

		Cliente c1 = cm.find(1);
		assertNotNull(c);
		assertEquals(c.getNombre(), c1.getNombre());
		assertEquals(c.getCuit(), c1.getCuit());
		assertEquals(c.getDni(), c1.getDni());
		assertEquals(c.getNroCliente(), c1.getNroCliente());

		assertEquals(c1.getCuentas().get(0).getTipoCuenta(), TipoCuenta.CtaCorriente);

	}
	@Test
	public void FindClienteByNombreTest() {
		
		ClienteMapper cm = new ClienteMapper();
		long cantidad = cm.Count();
		assertEquals(1, cantidad);
		cm.borrarLoadedMap();	
		Object obj = cm.findByNombre("Martin").get(0);
		Cliente c1 = (Cliente) obj;
		assertEquals(c.getNombre(), c1.getNombre());
		assertEquals(c.getCuit(), c1.getCuit());
		assertEquals(c.getDni(), c1.getDni());
		assertEquals(c.getNroCliente(), c1.getNroCliente());
		assertNotNull(c);
		assertEquals(c1.getCuentas().get(0).getTipoCuenta(), TipoCuenta.CtaCorriente);
	}


}
